Twelve-Factor App
良い感じのアプリケーションを作るための12のプラクティス
Herokuのエンジニアによって提唱された
The Twelve-Factor App (日本語訳)
目的
環境差異(開発・検証・本番)を最小化
水平スケールしやすい構成
自動化・運用コストの低減
チーム開発での一貫性確保
12の原則
1. Codebase
単一のコードベースをバージョン管理(Git等)
環境差は設定で吸収
2. Dependencies
依存関係は明示的に宣言・分離
グローバル環境に依存しない(例:package.json, requirements.txt)
3. Config
設定は環境変数で管理
コードに設定値を埋め込まない(DB URL, APIキー等)
4. Backing Services
DB・キュー・キャッシュは差し替え可能な外部サービスとして扱う
5. Build, Release, Run
build → release → runを明確に分離
実行中にコードを書き換えない
6. Processes
アプリはステートレス
状態はDBや外部ストレージへ
7. Port Binding
アプリ自身がHTTPサーバを持ち、ポートにバインド
Webサーバ(Apache等)に依存しない
8. Concurrency
プロセスの水平スケールで負荷対応
ワーカーやWebを役割分担
9. Disposability
高速起動・安全なシャットダウン
スケールやデプロイに強い
10. Dev/Prod Parity
開発・本番の差異を極力小さく
同種のDB・ミドルウェアを使う
11. Logs
ログはイベントストリーム
ファイルに書かず標準出力へ(集約は基盤側)
12. Admin Processes
マイグレーション等の管理タスクは一時プロセスとして実行